# Create your views here.

from apsoo.hotel.models import Reserva, Apartamento, HistoricoOcupacao
#from checkbox.properties import List
from apsoo.hotel.forms import F11
from apsoo.hotel.models import Reserva, Apartamento, Hospede
from checkbox.properties import List
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.utils.datetime_safe import datetime


#dado id do apartamento e datas de inicio e fim, retorna se reserva pode ser feita
def view1( idAp, dtIni, dtFim ):
	reservas1 = Reserva.objects.filter( entradaPrevista__lte = dtIni ).filter( saidaPrevista__gte = dtIni ).filter( idApartamento = idAp)
	reservas2 = Reserva.objects.filter( entradaPrevista__lte = dtFim ).filter( saidaPrevista__gte = dtFim ).filter( idApartamento = idAp)
	reservas3 = Reserva.objects.filter( entradaPrevista__lte = dtIni ).filter( saidaPrevista__gte = dtFim ).filter( idApartamento = idAp)
	if (reservas1.count() == reservas2.count() == reservas3.count() == 0):
		return True
	else: return False 

#dados data de inicio e data de fim, retorna os apartamentos disponiveis
def view2( dtIni, dtFim ):
	apList = []
	for ap in Apartamento.objects.all() :
		if view1( ap.id, dtIni, dtFim ) :
			apList.append(ap)
	return apList

#retorna as reservas q entram em conflito com esse periodo
def confl( idAp, dtIni, dtFim ):
	reservas1 = Reserva.objects.filter( entradaPrevista__lte = dtIni ).filter( saidaPrevista__gte = dtIni ).filter( idApartamento = idAp).order_by( 'entradaPrevista' )
	reservas2 = Reserva.objects.filter( entradaPrevista__lte = dtFim ).filter( saidaPrevista__gte = dtFim ).filter( idApartamento = idAp).order_by( 'entradaPrevista' )
	reservas3 = Reserva.objects.filter( entradaPrevista__lte = dtIni ).filter( saidaPrevista__gte = dtFim ).filter( idApartamento = idAp).order_by( 'entradaPrevista' )
	reList = []
	for re in reservas1 :
			reList.append(re)
	for re in reservas2 :
			reList.append(re)
	for re in reservas3 :
			reList.append(re)
	return reList

#verifica se o dia tem interseccao com a reserva, auxiliar
def verificaIntersec( reList, dia):
	for re in reList :
		if dia > re.entradaPrevista and dia < re.saidaPrevista :
			return True
	return False

#retorna os dias do periodos pro qual podem ser feitas reservas no ap
def view3( idAp, dtIni, dtFim ):
	perList = []
	reList = confl( idAp, dtIni, dtFim )
	while dtIni < dtFim :
		if ~ verificaIntersec( reList, dtIni ) :
			perList.append(dtIni)
		dtIni = dtIni + 1
	return perList	
	

def view4(request):
	bole = view1( 1, datetime.now(), datetime.now())
	html = "%s" % bole
	return HttpResponse(html)

def seApartamentoTaLivre(request):
	idAP = request.POST['idAP']
	dtIni = request.POST['dtIni']
	dtFim = request.POST['dtFim']
	html = "%s" % view1(idAP, dtIni, dtFim)
	return HttpResponse(html)	

#dado id do apartamento e datas de inicio e fim, retorna se reserva pode ser feita
def view5( idAp, dtIni, dtFim ):
	reservas1 = HistoricoOcupacao.objects.filter( dataInicio__lte = dtIni ).filter( dataFim__gte = dtIni ).filter( idApartamento = idAp)
	reservas2 = HistoricoOcupacao.objects.filter( dataInicio__lte = dtFim ).filter( dataFim__gte = dtFim ).filter( idApartamento = idAp)
	reservas3 = HistoricoOcupacao.objects.filter( dataInicio__lte = dtIni ).filter( dataFim__gte = dtFim ).filter( idApartamento = idAp)
	if (reservas1.count() == reservas2.count() == reservas3.count() == 0):
		return True
	else: return False

def seApartamentoTaLivre(request):
	idAP = request.POST['idAP']
	dtIni = request.POST['dtIni']
	dtFim = request.POST['dtFim']
	html = "%s" % view1(idAP, dtIni, dtFim)
	return HttpResponse(html)	

def V11(request):
	form = F11()
	return render_to_response("teste.html", {'form' : form,})

def V12(request):
	contexto = { }
	if request.method == 'POST' :
		if request.POST['nome'] == '' :
			contexto = Hospede.objects#.filter(nome = form.nome)
			return render_to_response("escolherHospede.html", {'hospedes' : contexto,})
		contexto = Hospede.objects.filter(cpf = request.POST['cpf'])
		return render_to_response("escolherHospede.html", {'hospedes' : contexto,})
	return render_to_response("escolherHospede.html",{})			
#dado id do apartamento e datas de inicio e fim, retorna se reserva pode ser feita
def view6( idAp, dtIni, dtFim , idHosp):
	reservas1 = Reserva.objects.filter( entradaPrevista__lte = dtIni ).filter( saidaPrevista__gte = dtIni ).filter( idApartamento = idAp).exclude( idHospede = idHosp )
	reservas2 = Reserva.objects.filter( entradaPrevista__lte = dtFim ).filter( saidaPrevista__gte = dtFim ).filter( idApartamento = idAp).exclude( idHospede = idHosp )
	reservas3 = Reserva.objects.filter( entradaPrevista__lte = dtIni ).filter( saidaPrevista__gte = dtFim ).filter( idApartamento = idAp).exclude( idHospede = idHosp )
	if (reservas1.count() == reservas2.count() == reservas3.count() == 0):
		return True
	else: return False 